Nous avons déjà vu, dans les chapitres précédents quelques unes des options de QEmu. En voici un parcours plus détaillé. Toutes les options ne sont pas présentées, nous nous limiterons aux plus utiles.
QEmu peut émuler une ou plusieurs cartes réseau. Les cartes émulées sont des modèles 10 Mbit/s, mais ceci est amplement suffisant pour un système virtuel. Ces interfaces permettent à QEmu de communiquer avec le monde extérieur, et en premier lieu avec le système hôte. La création d'un VLAN permet également de construire un réseau entre les machines virtuelles. Cette option pose toutefois encore quelques problèmes de fonctionnement sur un hôte Windows.
L'option complète permettant de créer une carte réseau est :
-net nic[,macaddr=xx:xx:xx:xx][,model=<type>]
Les options macaddr et type sont facultatives.
Les valeurs possibles pour <type> sont : ne2k_pci, ne2k_isa, rtl8139, smc91c111, lance. Si <type> n'est pas précisé, ne2k_pci est pris par défaut. Cette option peut être répétée autant de fois qu'il faut de cartes réseau dans le système cible, mais il faut prendre soin de donner une adresse MAC différente à chaque carte (option macaddr=xx:xx:xx:xx avec 52:54:00:12:34:56 comme valeur par défaut).
Lorsqu'aucune option réseau n'est fournie à QEmu, il crée par défaut une carte réseau PCI à base de circuit RTL8029 (ne2k_pci). L'option par défaut est en réalité : -net nic -net user.
Pour interdire la création de la carte réseau, il faut ajouter l'option -net none à la ligne de commande.
L'émulation réseau de QEmu peut être implémentée de deux manières.
Le premier mode, le mode utilisateur (user mode) fonctionne correctement sur un hôte Windows, sans élément supplémentaire. Dans ce cas, QEmu se comporte comme n'importe quelle application faisant appel au réseau, utilisant le matériel et les composants réseau existants.
Le second mode, TUN/TAP, est plus spécifique au monde Linux, mais peut être implémenté sous Windows à condition d'installer le logiciel nécessaire. Dans ce mode QEmu crée une carte réseau virtuelle sur l'hôte, où elle peut être configurée comme n'importe quel autre périphérique. Ce mode nécessite les droits d'administration sur l'hôte, puisqu'un périphérique (virtuel) doit être créé.
Dans ce mode, qui est d'ailleurs le mode par défaut, QEmu ne se contente pas d'émuler la carte réseau de l'ordinateur virtuel, mais il intègre également un pare-feu/passerelle, un serveur DHCP, un serveur DNS et un serveur SMB. Ces éléments ne sont toutefois pas paramétrables.
Illustration
4: Architecture réseau
Après l'installation du SE cible, vous pouvez vérifier le bon fonctionnement de la carte réseau virtuelle et de la couche TCP/IP en tapant :
ping 10.0.2.2
dans une invite de commande ou un terminal du SE cible. Vous devriez obtenir quelque chose ressemblant à ceci :
Envoi d'une requête 'ping' sur
10.0.2.2 avec 32 octets de données :
Réponse de
10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de
10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de
10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de
10.0.2.2 : octets=32 temps<1ms TTL=128
Statistiques Ping
pour 10.0.2.2:
Paquets : envoyés =
4, reçus = 4, perdus = 0 (perte 0%),
Durée
approximative des boucles en millisecondes :
Minimum
= 0ms, Maximum = 0ms, Moyenne = 0ms
Dans la plupart des cas, il suffit de configurer le protocole TCP/IP de la machine virtuelle pour utiliser DHCP, et tous les autres paramètres se mettent en place automatiquement. Par défaut, la machine virtuelle se verra attribuer l'adresse 10.0.2.15.
Voici, par exemple, la configuration réseau de Windows 2000 sous QEmu :
C:\>ipconfig/all
Configuration IP
de Windows 2000
Nom de l'hôte
. . . . . . . . . . : QEMU-W2K
Suffixe
DNS principal . . . . . . :
Type de
noeud . . . . . . . . . . : Diffuser
Routage
IP activé . . . . . . . . : Oui
Proxy
WINS activé . . . . . . . . : Non
Ethernet carte
Connexion au réseau local :
Suffixe
DNS spéc. à la connexion. :
Description
. . . . . . . . . . . : Carte Realtek PCI Ethernet à base
RTL8029(AS)
Adresse physique. . . .
. . . . . : 52-54-00-12-34-56
DHCP
activé . . . . . . . . . . . : Oui
Autoconfiguration
activée . . . . : Oui
Adresse
IP. . . . . . . . . . . . : 10.0.2.15
Masque
de sous-réseau . . . . . . : 255.255.255.0
Passerelle
par défaut . . . . . . : 10.0.2.2
Serveur
DHCP. . . . . . . . . . . : 10.0.2.2
Serveurs
DNS. . . . . . . . . . . : 10.0.2.3
Bail
obtenu . . . . . . . . . . . : mardi 4 juillet 2006
08:16:27
Bail expire . . . . . . . .
. . . : mercredi 5 juillet 2006 08:16:27
Dans le mode TUN/TAP, QEmu crée une carte réseau virtuelle directement sur le système hôte, par l'intermédiaire de laquelle il aura accès au réseau. Cette approche diffère du mode utilisateur, qui s'appuie simplement sur la configuration réseau existante de l'hôte, sans ajouter de matériel.
Ce mode est utilisable facilement sur les hôtes Linux, mais pour un hôte Windows, il est nécessaire d'installer un produit pouvant créer un adaptateur TAP. OpenVPN (http://openvpn.net), par exemple, peut être utilisé à cette fin. Une procédure de configuration, en anglais, existe ici : http://www.h7.dion.ne.jp/~qemu-win/TapWin32-en.html#vlan.
**** A compléter ****
Le VLAN permet de connecter plusieurs machines virtuelles entre elles. QEmu permet de construire ce réseau de plusieurs manières différentes. Il peut être limité aux instances de QEmu, ou ouvert sur l'Internet, par l'intermédiaire du réseau user mode ou TUN/TAP.
Note : Cette option ne semble pas fonctionner correctement avec un hôte Windows pour le moment, l'option connect n'étant pas reconnue... Un patch est disponible ici : http://www.h7.dion.ne.jp/~qemu-win/, mais il n'est pas certain qu'il s'applique correctement sur les derniers sources CVS.
Quoi qu'il en soit, le schéma ci-dessous illustre les combinaisons possibles pour construire un VLAN avec QEmu. Il est bien sûr possible de n'en implémenter qu'une partie.
Illustration
5: VLAN - Toutes les combinaisons
Qn représente une instance de QEmu
L'instance Q1 est configurée pour utiliser le réseau en mode utilisateur, permettant l'accès à Internet.
Les instances Q3 et Q4 sont sur un VLAN différent.
Q3 possède deux cartes réseaux, chacune sur un VLAN différent.
Lorsqu'il n'est pas précisé, VLAN=0 par défaut.
Les options de ligne de commande qui permettent de configurer le VLAN sont les suivantes :
-net user[,vlan=n][,hostname=host]
-net tap[,vlan=n],ifname=name
-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
-net socket[,vlan=n][,fd=h][,mcast=maddr:port]
En combinant ces options, il est possible de réaliser tout ou partie du VLAN décrit ci-dessus.
Les points à prendre en considération lorsqu'on construit un VLAN sont les suivants :
chaque carte réseau virtuelle doit avoir une adresse MAC différente ;
chaque machine virtuelle doit se voir attribuer une adresse IP différente, dans la plage autorisée par le masque de sous-réseau (255.255.255.0) ;
les noms des machines (dans le SE cible) doivent être différents.
Cette option n'étant pas utilisable pour le moment sous Windows, nous nous bornerons à l'aborder sur le plan théorique. Voici, dans le principe, les lignes de commande à taper pour obtenir la configuration ci-dessus :
**** A compléter ****
Autres options réseau de QEmu.
-redir [tcp|udp]:host-port:[guest-host]:guest-port : permet de rediriger des ports TCP ou UDP de l'hôte vers la machine virtuelle. Nécessite l'emploi de -net user (option par défaut).
[tcp|udp], facultatif, indique si le port redirigé est un port TCP ou UDP
host-port : numéro du port du système hôte qui doit être redirigé.
[guest-host], facultatif, est l'adresse IP du système cible sur le VLAN QEmu (10.0.2.15 par défaut).
guest-port : port du système cible vers lequel le port hôte est redirigé.
Reportez vous au paragraphe 5.2.5, page 27 pour un exemple de redirection. Pour rediriger d'autres ports, ajoutez autant d'options -redir que nécessaire.
C'est le moyen le plus simple pour échanger des fichiers entre l'hôte et la machine virtuelle. Il est reconnu par tous les SE. L'échange est possible en lecture et en écriture dans les deux sens (hôte <---> machine virtuelle).
Inconvénients : il n'est pas très rapide, et sa capacité est très limitée.
La commande change fda //./a: du moniteur permet d'insérer une disquette dans la machine virtuelle.
La commande eject fda retire la disquette du lecteur de la machine virtuelle.
Sans doute le moyen le plus souple et le plus efficace lorsque l'hôte et la cible sont des SE Microsoft. Ce mode permet de partager des fichiers en lecture et en écriture dans les deux sens (hôte <---> machine virtuelle). Aucune option n'est nécessaire sur la ligne de commande de QEmu, sinon que le support réseau doit être activé.
Créez un dossier sur le disque dur de l'hôte : C:\QEMU\QPARTAGE, par exemple.
Faites un clic-droit sur ce dossier, puis cliquez sur Partage et sécurité. Donnez un nom au partage, puis cliquez sur le bouton Autorisations. Attribuez les droits de Lecture et Modifier au groupe Tout le monde.
Passez
ensuite dans le SE cible, ouvrez un explorateur Windows
(si vous avez installé Windows dans
QEmu), cliquez sur Outils, Connecter un lecteur réseau.
Choisissez une lettre pour le lecteur, dans la zone Dossier, entrez
\\10.0.2.2\<NomDuPartage>, cochez la case Se reconnecter à
l'ouverture de session.
Vous pouvez maintenant partager des fichiers.
Si le SE cible est Windows 9x, la procédure de connexion sous QEmu est légèrement différente (la création du partage sur l'hôte reste identique). Dans le SE cible :
Commencez par modifier le fichier C:\Windows\hosts. En principe, ce fichier ne contient qu'une seule ligne, de la forme : 127.0.0.1 localhost.
Ajoutez une ligne similaire à ce fichier, contenant : nnn.nnn.nnn.nnn <NomHOTE>. Pour obtenir ces deux informations, tapez, sur l'hôte, une commande ipconfig /all. Vous trouverez dans les lignes Nom de l'hôte et Adresse IP les informations nécessaires. Il s'agit bien des nom et adresse IP de l'hôte qu'il faut inscrire dans le fichier hosts du SE cible. Vous pouvez enregistrer et fermer le fichier hosts.
La connexion du lecteur réseau se fait ensuite de la même manière que ci-dessus.
Dans un SE cible d'origine non-Microsoft, il existe souvent une procédure similaire. smbclient doit être installé lorsque Linux est le SE cible pour reconnaître les partages Microsoft. D'autres SE peuvent avoir des modules équivalents.
Remarque : ce partage n'est possible que si le support réseau (user mode ou TUN/TAP) est configuré.
Cette option permet des transferts hôte ---> machine virtuelle. Le répertoire désigné sur la ligne de commande de QEmu apparaît au SE cible comme un nouveau lecteur de disques. Tout le contenu existant de ce répertoire est visible. Il est possible d'écrire sur ce disque, mais les modifications ne sont pas répercutées vers le dossier de l'hôte, et ne sont pas conservées. Après un redémarrage de QEmu, toutes les modifications sont perdues.
L'option à ajouter à la ligne de commande est :
-hdd fat:c:\temp par exemple, pour monter ce dossier comme nouveau disque dans QEmu. Dans ce cas, ce sera le disque E:. Le nom de ce lecteur sera QEMU VVFAT. Un répertoire peut également être monté en tant que disquette en utilisant -fda fat:floppy:c:\temp.
L'option -fda fat:floppy:rw:c:\temp permet de valider l'écriture dans le dossier de l'hôte, mais cette variante, utilisable uniquement avec le paramètre :floppy: n'est pas encore stabilisée : à utiliser avec précautions.
QEmu permet d'accéder à un dossier de l'hôte par l'intermédiaire du protocole TFPT (Trivial File Transfer Protocol), version simplifiée de FTP. Cette possibilité suppose l'emploi de l'option -net user (option par défaut) sur la ligne de commande de QEmu.
Si le SE cible n'a pas de client TFTP, il faut en installer un. Windows 2000, par exemple, possède un client TFTP intégré.
Pour utiliser le transfert par TFTP, il faut indiquer à QEmu le répertoire dans lequel il pourra lire les fichiers. L'écriture n'est pas possible. Le transfert est limité au sens hôte ---> machine virtuelle, un seul fichier à la fois (les caractères génériques - *, ? - ne sont pas autorisés). On ajoutera donc à la ligne de commande l'option -tftp /Temp si on veut partager le répertoire \Temp de l'hôte. Ce répertoire devra être situé sur le même disque que le fichier qemu.exe.
Dans la machine virtuelle, il sera alors possible de transférer un fichier :
C:\>TFTP -i 10.0.2.2 get /temp/essai.txt \temp\essait.txt
où :
/temp/essai.txt est le fichier à copier depuis l'hôte;
\temp\essai.txt est la destination dans le client. Ce paramètre est facultatif. Il peut se résumer à un nom de fichier.
Bien entendu, le dossier déclaré pour le transfert TFTP ne peut être changé que lors d'un redémarrage de QEmu.
Ne semble pas fonctionner actuellement, sur un hôte Windows en tout cas...
Le partage SMB ressemble fortement au partage Microsoft (ce qui est normal puisque SMB est le protocole Microsoft pour le partage de fichiers en réseau), mis à part que le nom du dossier partagé est figé lors du démarrage de QEmu. La ligne de commande de QEmu doit être complétée par -smb /Temp si l'on veut partager le répertoire C:\Temp.
Il faut ensuite, dans l'hôte, ajouter au fichier lmhosts (C:\WINDOWS\LMHOSTS pour Windows 9x, C:\WINDOWS\SYSTEM32\DRIVERS\ETC\LMHOSTS pour Windows 2000-XP) la ligne :
10.0.2.4 smbserver
Le dossier partagé est ensuite accessible depuis le SE cible par la syntaxe \\smbserver\qemu. Ce nom peut être utilisé pour connecter un lecteur réseau.
Si le SE hôte n'est pas un SE Microsoft, il faudra y installer un serveur SMB (samba par exemple pour Linux)
L'option -usb de la ligne de commande active le contrôleur USB de la machine virtuelle. Si cette option est omise, la machine virtuelle démarre sans contrôleur USB. Dans sa version actuelle pour Windows, QEmu ne peut pas utiliser les périphériques USB physiques. La version pour Linux, par contre, le permet.
Pour 'brancher' un périphérique USB lors du démarrage de QEmu, utilisez l'option -usbdevice sur la ligne de commande. Voyez l'option usb_add du moniteur pour plus d'informations (paragraphe 5.3.5, page 31).
Les options de cette section permettent d'installer une ou plusieurs cartes sonores dans la machine virtuelle. -audio-help permet d'en connaître toutes les variantes :
C:\QEMU>qemu -audio-help
Audio
options:
QEMU_AUDIO_DAC_FIXED_SETTINGS: boolean,
default = 1
Use fixed settings for host
DAC
QEMU_AUDIO_DAC_FIXED_FREQ: integer, default =
44100
Frequency for fixed host
DAC
QEMU_AUDIO_DAC_FIXED_FMT: format, default = S16,
(one of: U8 S8 U16 S16)
Format for fixed
host DAC
QEMU_AUDIO_DAC_FIXED_CHANNELS: integer,
default = 2
Number of channels for fixed
DAC (1 - mono, 2 – stereo)
QEMU_AUDIO_DAC_VOICES:
integer, default = 1
Number of voices for
DAC
QEMU_AUDIO_ADC_FIXED_SETTINGS: boolean, default =
1
Use fixed settings for host
ADC
QEMU_AUDIO_ADC_FIXED_FREQ: integer, default =
44100
Frequency for fixed host
ADC
QEMU_AUDIO_ADC_FIXED_FMT: format, default = S16,
(one of: U8 S8 U16 S16)
Format for fixed
host ADC
QEMU_AUDIO_ADC_FIXED_CHANNELS: integer,
default = 2
Number of channels for fixed
ADC (1 - mono, 2 – stereo)
QEMU_AUDIO_ADC_VOICES:
integer, default = 1
Number of voices for
ADC
QEMU_AUDIO_TIMER_PERIOD: integer, default =
0
Timer period in HZ (0 - use lowest
possible)
QEMU_AUDIO_PLIVE: boolean, default =
0
(undocumented)
QEMU_AUDIO_LOG_TO_MONITOR:
boolean, default = 0
print logging
messages to montior instead of stderr
Available drivers:
Name:
sdl
Description: SDL http://www.libsdl.org
One playback
voice
Does not support capture
Options:
QEMU_SDL_SAMPLES:
integer, default = 1024
Size of SDL buffer
in samples
Name: none
Description: Timer based audio
emulation
Theoretically supports many playback
voices
Theoretically supports many capture voices
No
options
Name: wav
Description: WAV renderer
http://wikipedia.org/wiki/WAV
One playback voice
Does not
support capture
Options:
QEMU_WAV_FREQUENCY:
integer, default = 44100
Frequency
QEMU_WAV_FORMAT:
format, default = S16, (one of: U8 S8 U16
S16)
Format
QEMU_WAV_DAC_FIXED_CHANNELS:
integer, default = 2
Number of channels (1
- mono, 2 – stereo)
QEMU_WAV_PATH: string,
default = qemu.wav
Path to wave
file
Options are settable through environment
variables.
Example:
set QEMU_AUDIO_DRV=wav
set
QEMU_WAV_PATH=c:\tune.wav
qemu ...
On peut voir que QEmu permet un paramétrage très pointu des périphériques audio. Sans entrer dans le détail de ces options, il est possible d'activer l'émulation sonore simplement en choisissant le ou les périphériques adéquats. En fonction des options de compilation, certaines émulations audio peuvent être disponibles ou non. Tapez la commande suivante pour en prendre connaissance.
C:\QEMU>qemu -soundhw ?
Valid sound
card names (comma separated):
pcspk PC
speaker
sb16 Creative
Sound Blaster 16
es1370 ENSONIQ
AudioPCI ES1370
-soundhw all will enable all of the above
Dans le cas de l'exemple ci-dessus, trois périphériques sonores sont disponibles : le haut-parleur du PC, une SoundBlaster 16 et une Ensoniq ES1370. La carte compatible AdLib n'est disponible que si l'option -enable-adlib a été ajoutée sur la ligne de commande de ./configure (paragraphe 3.2.4, page 7), avant la compilation de QEmu.
Pour installer une SB16 et une ES1370, il faut fournir le paramètre suivant à la ligne de commande : -soundhw sb16,es1370. Pour installer automatiquement toutes les cartes sonores disponibles, utilisez l'option -soundhw all.
VNC (http://fr.wikipedia.org/wiki/VNC) est un protocole permettant de se connecter à un ordinateur distant, pour en prendre le contrôle comme si on était assis devant. QEmu intègre un serveur VNC qui peut être activé avec l'option -vnc n. Dans ce cas, QEmu démarre sans fenêtre visible (on ne voit rien directement à l'écran), mais on peut s'y connecter avec n'importe quel client VNC (UltraVNC : http://ultravnc.sourceforge.net/, RealVNC : http://www.realvnc.com/ par exemple, mais il en existe bien d'autres). n est le numéro d'écran sur lequel le client devra se connecter.
Lancez votre client VNC, puis connectez vous sur : 127.0.0.1:n ou localhost:n. Il sera probablement nécessaire d'autoriser l'option loopback connections du client, sinon VNC refusera de se connecter au poste sur lequel il s'exécute.
En combinant cette option avec l'option -redir, il est possible de se connecter sur une instance QEmu depuis un autre ordinateur du réseau (redirection du port 5900, communément utilisé par VNC). Voici comment cela est possible :
Sur un premier ordinateur, que nous appellerons PC01, lancer QEmu avec une ligne de commande semblable à celle-ci :
qemu.exe ..... -usb -usbdevice tablet -redir tcp:5890::5900 -vnc 1 -k fr
L'option -redir permet de rediriger le port 5890 (le numéro 5890 est arbitraire) de l'hôte (PC01) vers le port 5900 de la machine virtuelle (le port 5900 est le port par défaut utilisé par VNC).
L'option -vnc 1 indique au serveur VNC de QEmu que les clients se connecteront sur l'écran n° 1.
A partir du PC02, le client VNC (viewer) se connectera en utilisant la syntaxe : PC01:1:5890. Dans les options du client, il faudra prendre soin de choisir un encodage Hextile, et une profondeur de 256 couleurs. Suivant le client VNC utilisé (UltraVNC, RealVNC, TightVNC, etc...), il faudra parfois jouer sur d'autres options d'encodage pour obtenir une stabilité maximale de la connexion.
Remarque : l'utilisation de l'option -vnc nécessite l'option -k (paragraphe 5.2.6, page 29) pour imposer la langue du clavier.
Voici encore quelques options qui n'entrent pas dans les catégories précédentes :
-boot [a|c|d] : permet de choisir le périphérique de démarrage de la machine virtuelle. c est la valeur par défaut lorsqu'aucune option boot n'est précisée.
-snapshot : cette option s'applique aux images disques. Lorsqu'elle est utilisée, les écritures ne sont pas faites dans l'image, mais dans un fichier temporaire. Lorsqu'on quitte QEmu, toutes les écritures faites sur les disques durs pendant la session sont ignorées. Cette option est équivalente à l'utilisation d'une image de base automatique et temporaire (voir qemu-img). Une commande du moniteur permet toutefois de valider ces écritures en les intégrant dans le fichier image.
-m nnn : permet d'allouer nnn Mo de RAM à la machine virtuelle. La valeur par défaut est de 128 Mo. Ajustez cette valeur en fonction des besoins du SE cible.
-smp n : permet de simuler une machine à plusieurs processeurs. n peut aller de 1 à 255, la valeur par défaut étant 1.
-win2k-hack : cette option peut se révéler nécessaire lorsqu'on installe Windows 2000 en tant que SE cible. L'installation de W2K se met parfois en boucle, remplissant complètement l'image disque. Ce paramètre permet d'éviter cette erreur, mais il ralentit l'émulateur. Ne l'utilisez pas en fonctionnement normal, mais seulement pendant l'installation de Windows 2000.
-S : cette option permet de figer la machine virtuelle dès le chargement de QEmu. Cela peut vous laisser le temps de changer l'affinité du processus avant de relancer l'exécution normale (commande cont ou c du moniteur).
-std-vga permet de remplacer la carte Cirrus Logic GD-5446 (carte par défaut) par une carte VGA VESA standard. Peut être utilise si le SE cible ne reconnaît pas correctement la carte par défaut.
-no-acpi désactive le support ACPI (http://fr.wikipedia.org/wiki/ACPI) si le SE cible ne réagit pas correctement à cette interface.
-loadvm <fichier> : jusqu'à la version 0.8.1, le moniteur, avec sa commande savevm permettait de sauvegarder l'état complet d'une machine virtuelle avant d'arrêter QEmu (un peu l'équivalent de la mise en hibernation de Windows, ou toute la RAM est sauvegardée dans un fichier). Cette option permet de recharger cet état au démarrage du programme. <fichier> fait référence au nom donné lors de la sauvegarde de l'état.
Depuis la version 0.8.2, le fonctionnement de cette commande a changé. Voyez le paragraphe 5.3.7, page 32 pour plus de précisions.
-k <langue> : permet de forcer la disposition du clavier. Cette option est nécessaire lorsqu'on utilise l'option -vnc (paragraphe 5.2.5, page 27), sinon QEmu émule un clavier américain. <langue> peut être :
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr
Les fichiers de disposition du clavier se trouvent dans C:\MSYS\\home\<NomUtilisateur>\qemu\keymaps. Copiez ce dossier dans le le dossier C:\QEMU\BIOS afin que QEmu puisse trouver les définitions de clavier.